package com.hqyj.blog.server.controller;

import cn.dev33.satoken.stp.StpUtil;
import com.hqyj.blog.server.service.UsersService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

import com.hqyj.blog.server.json.R;
import com.hqyj.blog.server.entity.Users;

@RestController
@RequestMapping("users")
public class UsersController {

    @Resource
    private UsersService usersService;

    @PostMapping("reg")
    public R reg(@RequestBody Users u) {
        try {
            if (usersService.reg(u)) {
                return R.success("注册成功！");
            }
            return R.fail("注册失败！");
        } catch (Exception ex) {
            ex.printStackTrace();
            return R.error("程序出现异常！");
        }
    }

    @GetMapping("checkIsReg")
    public R checkIdentifyIsReg(@RequestParam(value = "identify", required = true) String identify) {
        try {
            if (usersService.checkIdentifyIsReg(identify)) {
                return R.fail("该手机或者电子邮箱已经被注册!");
            }
            return R.success("该手机或者邮箱可以注册！");
        } catch (Exception ex) {
            ex.printStackTrace();
            return R.error("程序出现异常！");
        }
    }

    @GetMapping("auth")
    public R login(@RequestParam("identify") String identify, @RequestParam("password") String password) {
        try {
            Users loginSuccessUser = usersService.login(identify, password);
            if (loginSuccessUser != null) {
                loginSuccessUser.setPassword("");

                //保存登录状态。
                StpUtil.login(loginSuccessUser.getUid());


                //保存登录状态。
                StpUtil.login(loginSuccessUser.getUid());

                return R.success("登录成功！", loginSuccessUser);
            }
            return R.fail("登录失败，请检查用户名或者密码是否正确!");
        } catch (Exception ex) {
            ex.printStackTrace();
            return R.error("程序出现异常！");
        }

    }

    @GetMapping("isLogin")
    public R isLogin() {
        System.out.println("-----------前端发送了检查登录状态的请求--------------");
        try {
            if (StpUtil.isLogin()) {
                System.out.println("已登录....");
                return R.success("当前用户已登录", true);
            } else {
                System.out.println("未登录....");
                return R.fail("当前用户未登录");
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            return R.error("程序出现异常！");
        }
    }

    @GetMapping("logout")
    public R logout() {
        try {
            StpUtil.logout();
            return R.success("注销成功！");
        } catch (Exception ex) {
            ex.printStackTrace();
            return R.error("程序出现异常！");
        }
    }

    @PutMapping("/update")
    public R updateUserProfile(@RequestBody Users user) {
        try {
            if (usersService.updateUsersProfile(user)) {
                return R.success("更新用户资料成功！");
            }
            return R.fail("更新用户资料失败！");
        } catch (Exception ex) {
            ex.printStackTrace();
            return R.error("程序出现异常！");
        }
    }

    //获取登录用户的最新的资料
    @GetMapping("/profile")
    public R queryLoginUserProfile(Integer uid){
        try{
            Users loginUserProfile = usersService.queryUserProfileByUid(uid);
            return R.success("查询最新用户资料成功！",loginUserProfile);
        }catch (Exception ex){
            ex.printStackTrace();
            return R.error("程序出现异常！");
        }
    }
}
